#include <REGX52.H>
#include "Timer0.h"
#include "Delay.h"

sbit Buzzer = P2^5;
#define P   0
#define L1  1
#define L1_ 2
#define L2  3
#define L2_ 4
#define L3  5
#define L4  6
#define L4_ 7
#define L5  8
#define L5_ 9
#define L6  10
#define L6_ 11
#define L7  12
#define M1  13
#define M1_ 14
#define M2  15
#define M2_ 16
#define M3  17
#define M4  18
#define M4_ 19
#define M5  20
#define M5_ 21
#define M6  22
#define M6_ 23
#define M7  24
#define H1  25
#define H1_ 26
#define H2  27
#define H2_ 28
#define H3  29
#define H4  30
#define H4_ 31
#define H5  32
#define H5_ 33
#define H6  34
#define H6_ 35
#define H7  36


//包含所有音高的数组
unsigned int FreqTable[]=
{
	0,
	63628,63731,63835,63928,64021,64103,64185,64260,64331,64400,64463,64528,
	64580,64633,64684,64732,64777,64820,64860,64898,64934,64968,65000,65030,
	65058,65085,65110,65134,65157,65178,65198,65217,65235,65252,65268,65283
};

//小星星乐谱
unsigned char code XiaoXingXing[]=
{
13,4,
13,4,
20,4,
20,4,
22,4,
22,4,
20,8,
18,4,
18,4,
17,4,
17,4,
15,4,
15,4,
13,8,	
0xFF,  //终止符
};
//天空之城曲谱
unsigned char code SkyCity[]=
{
	0,4,
	0,4,
	0,4,
	M6,2,
	M7,2,
	
	H1,4+2,
	M7,2,
	H1,4,
	H3,4,
	
	M7,4+4+4,
	M3,2,
	M3,2,
	
	0xFF,
};


unsigned char FreqSelect,XXXSelect;//音节选择
void main()
{
	Timer0_Init();
	while(1)
	{
		if(XiaoXingXing[XXXSelect] != 0xFF)
		{
			FreqSelect = XiaoXingXing[XXXSelect];
			XXXSelect++;		
			Delay(125*XiaoXingXing[XXXSelect]);
			XXXSelect++;
			TR0=0;//每演奏一下关闭定时器，再打开，保障每个音符分开
			Delay(5);
			TR0=1;		
		}
		else
		{
			TR0=0;
			while(1);
		}
	}
}

void Timer0_Routine() interrupt 1
{
	if(FreqTable[FreqSelect])
	{
		TL0 = FreqTable[FreqSelect]%256;				//设置定时初始值
		TH0 = FreqTable[FreqSelect]/256;				//设置定时初始值
		Buzzer =! Buzzer;		
	}
}